<?php

/*
 * This file is part of the Sonata package.
 *
 * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Application\Sonata\UserBundle\Admin\Model;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use FOS\UserBundle\Model\UserManagerInterface;
use Sifast\ProjectBundle\Form\AdresseType;

class UserAdmin extends Admin {

    public function getTemplate($name) {
        switch ($name) {
            case 'edit':
                return 'ApplicationSonataUserBundle:Profile:edit.html.twig';
                break;
            default:
                return parent::getTemplate($name);
                break;
        }
    }

    protected $formOptions = array(
        'validation_groups' => 'Profile'
    );

    /**
     * {@inheritdoc}
     */
    protected function configureListFields(ListMapper $listMapper) {
        $listMapper
                ->addIdentifier('username')
                ->add('email')
                ->add('groups')
                ->add('enabled', null, array('editable' => true))
                ->add('locked', null, array('editable' => true))
                ->add('createdAt')
        ;

        if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) {
            $listMapper
                    ->add('impersonating', 'string', array('template' => 'SonataUserBundle:Admin:Field/impersonating.html.twig'))
            ;
        }
    }

    /**
     * {@inheritdoc}
     */
    protected function configureDatagridFilters(DatagridMapper $filterMapper) {
        $filterMapper
                ->add('id')
                ->add('username')
                ->add('locked')
                ->add('email')
                ->add('groups')
        ;
    }

    /**
     * {@inheritdoc}
     */
    protected function configureShowFields(ShowMapper $showMapper) {
        $showMapper
                ->with('General')
                ->add('username')
                ->add('email')
                ->end()
                ->with('Groups')
                ->add('groups')
                ->end()
                ->with('Profile')
                ->add('dateOfBirth', 'birthday')
                ->add('firstname')
                ->add('lastname')
                ->add('website')
                ->add('biography')
                ->add('gender')
                ->add('locale')
                ->add('timezone')
                ->add('phone')
                ->end()
                ->with('Social')
                ->add('facebookUid')
                ->add('facebookName')
                ->add('twitterUid')
                ->add('twitterName')
                ->add('gplusUid')
                ->add('gplusName')
                ->end()
                ->with('Security')
                ->add('token')
                ->add('twoStepVerificationCode')
                ->end()
        ;
    }

    /**
     * {@inheritdoc}
     */
    protected function configureFormFields(FormMapper $formMapper) {
        $formMapper
                ->with('Informations personnelles')
                ->add('matricule')
                ->add('nom')
                ->add('prenom')
                ->add('sexe')
                ->add('username')
                ->add('email')
                ->add('plainPassword', 'text', array('required' => false))
                ->add('date_naissance')
                ->add('photo')
                ->add('num_securite_sociale')
                ->add('num_carte_identite')
                ->add('date_delivrance', 'date', array(
                    'label' => 'Date delivrance:',
                    'widget' => 'single_text',
                    'format' => 'MM/dd/yyyy',
                    'attr' => array('class' => 'datepicker')
                ))
                ->add('nationalite')
                ->add('num_passeport')
                ->add('lieu_naissance')
                ->add('adresses', 'sonata_type_collection', array(
                    'required' => true,
                    'by_reference' => false,
                    'label' => 'Phones',
                        ), array(
                    'edit' => 'inline',
                    'inline' => 'table',
                    'sortable' => 'position',
                    'targetEntity' => 'Sifast\ProjectBundle\Entity\Adresse',
                    'link_parameters' => array(
                        'context' => 'user'
                    )
                ))
                
                ->with('L1')
//                ->add('numVoie', 'text', array(
//                    'label' => 'Numéro de la voie:',))
//                ->add('pays', 'choice', array(
//                    'label' => 'Pays:',
//                    'choices' => array(
//                        'Choisir le pays' => 'Choisir le pays',
//                        'Tunisie' => 'Tunisie',
//                        'France' => 'France',
//                        'Autre' => 'Autre')
//                ))
                ->end()
                ->with('L2')
//                ->add('nomVoie', 'text', array(
//                    'label' => 'Nom de la voie:',))
//                ->add('ville', 'choice', array(
//                    'label' => 'Ville:',
//                    'choices' => array(
//                        'Choisir le pays' => 'Choisir la ville',
//                        'Sfax' => 'Sfax',
//                        'Sousse' => 'Sousse',
//                        'Tunis' => 'Tunis',
//                        'Autre' => 'Autre')
//                ))
                ->end()
//                ->add('localite', 'text', array(
//                    'label' => 'Localité:',))
//                ->add('dateDebutLocalite', 'date', array(
//                    'label' => 'Date de debut:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('codePostal', 'text', array(
//                    'label' => 'Code postal:',))
//                ->add('dateFinLocalite', 'date', array(
//                    'label' => 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('statut', 'choice', array(
//                    'label'=> 'Statut:',
//                    'choices' => array(
//                        'Choisir le statut' => 'Choisir le statut',
//                        'Célibataire' => 'Célibataire',
//                        'En couple' => 'En couple',
//                        'En couple' => 'En couple',
//                        'Marié' => 'Marié',
//                        'Veuf' => 'Veuf',
//                        'Divorcé' => 'Divorcé',
//                    )
//                ))
//                ->add('dateFinSituationFamiliale', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateDebutSituationFamiliale', 'date', array(
//                    'label'=> 'Date de debut:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
                ->add('telephoneDomicile', 'text', array(
                    'label' => 'Téléphone domicile:'
                ))
                ->add('mobile1Perso', 'text', array(
                    'label' => 'Mobile personnel 1:'
                ))
                ->add('mobile2Perso', 'text', array(
                    'label' => 'Mobile personnel 2:'
                ))
                ->add('mobile3Perso', 'text', array(
                    'label' => 'Mobile personnel 3:'
                ))
                ->add('telephoneTravail', 'text', array(
                    'label' => 'Téléphone travail:'
                ))
                ->add('mobile1Pro', 'text', array(
                    'label' => 'Mobile travail 1:'
                ))
                ->add('mobile2Pro', 'text', array(
                    'label' => 'Mobile travail 2:'
                ))
                ->add('mobile3Pro', 'text', array(
                    'label' => 'Mobile travail 3:'
                ))
                ->add('emailPro', 'text', array(
                    'label' => 'Email professionnel:'
                ))
                ->add('emailPerso', 'text', array(
                    'label' => 'Email personnel:'
                ))
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de debut:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('nom','text',array(
//                'label'=>'Nom:',
//                ))
//                ->add('prenom','text',array(
//                'label'=>'Prénom:',
//                ))
//                ->add('relation', 'choice', array(
//                    'label'=> 'Relation:',
//                    'choices' => array(
//                        'Choisir la relation' => 'Choisir la relation',
//                        'Conjoint' => 'Conjoint',
//                        'Enfant' => 'Enfant',
//                        'Pére' => 'Pére',
//                        'Mére' => 'Mére',
//                        'Autre' => 'Autre',
//                    )
//                ))
//                ->add('dateNaissance', 'date', array(
//                    'label'=> 'Date de naissance:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateDeces', 'date', array(
//                    'label'=> 'Date de décés:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                 ->add('handicape','choice', array(
//            'label'=>'Handicapé:',    
//            'expanded' => true,
//            'choices' => array('1' => 'Oui', '2' => 'Non'),
//            'data' => '1',
//                ))  
//                 ->add('inscritMutuelle','choice', array(
//            'label'=>'Inscrit à la mutuelle:',    
//            'expanded' => true,
//            'choices' => array('1' => 'Oui', '2' => 'Non'),
//            'data' => '1',
//                ))
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de debut:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
                ->end()
                ->with('Informations Profesionnelles')
//                    ->with('Specification poste')
//                ->add('titre','text',array(
//                'label'=>'Titre:'
//                ))
//                ->add('observation','text',array(
//                'label'=>'Observation:'
//                ))
//                ->add('categorie','text',array(
//                'label'=>'Catégorie:'
//                ))
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de debut:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('unite','text',array(
//                'label'=>'Unité:'
//                ))
//                          
//                ->add('responsable','text',array(
//                'label'=>'Responsable:'
//                ))
//                ->add('typePermis','text',array(
//                'label'=>'Type de permis:'
//                ))
//                ->add('dateObtention', 'date', array(
//                    'label'=> "Date d'obtention:",
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                 ->add('dateExpiration', 'date', array(
//                    'label'=> "Date d'expiration:",
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('numPermis','text',array(
//                'label'=>'Numéro de permis:'
//                ))   
//                ->add('typeContrat','text',array(
//                'label'=>'Type de contact:',
//                ))
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                )) 
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de début:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                 ->add('societe','text',array(
//                'label'=>'Socièté:',
//                ))
//                ->add('posteOccupe','text',array(
//                'label'=>'Poste occupé:',
//                ))
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de début',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                )) 
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('observations','text',array(
//                'label'=>'Observation:',
//                ))
//                ->add('niveau', 'choice', array(
//                    'label'=> 'Niveau:',
//                    'choices' => array(
//                        "Choisir le niveau d'étude" => "Choisir le niveau d'étude",
//                        'Bac' => 'Bac',
//                        'Bac+3' => 'Bac+3',
//                        'Bac+5' => 'Bac+5',
//                        'Bac>5' => 'Bac>5',
//                    )
//                ))
//                ->add('diplome','text',array(
//                'label'=>'Diplôme:',
//                )) ->add('filiere','text',array(
//                'label'=>'Filiére:',
//                ))
//               
//                ->add('anneeObtentionDiplome', 'choice', array(
//                    'label'=> 'Année obtention:',
//                    'choices' => array(
//                        "Choisir l'année" => "Choisir l'année",
//                        '2013' => '2013',
//                        '2012' => '2012',
//                        '2011' => '2011',
//                        '2010' => '2010',
//                        '2009' => '2009',
//                        '2008' => '2008',
//                        '2007' => '2007',
//                        '2006' => '2006',
//                        '2005' => '2005',
//                        '2004' => '2004',
//                        '2003' => '2003',
//                        '2002' => '2002',
//                        '2001' => '2001',
//                        '2000' => '2000',
//                        '1999' => '1999',
//                        '1998' => '1998',
//                        '1997' => '1997',
//                        '1996' => '1996',
//                        '1995' => '1995',
//                        '1994' => '1994',
//                        '1993' => '1993',
//                        '1992' => '1992',
//                        '1991' => '1991',
//                        '1990' => '1990',
//                     
//                    )
//                ))
//                ->add('mention','text',array(
//                'label'=>'Mention:',
//                )) 
//                ->add('dateDebut', 'date', array(
//                    'label'=> 'Date de début:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateFin', 'date', array(
//                    'label'=> 'Date de fin:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('natureCertification','text',array(
//                'label'=> 'Nature certification:',))
//                ->add('dateObtention', 'date', array(
//                    'label'=> "Date d'obtention :",
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateExpiration', 'date', array(
//                    'label'=> "Date d'expiration :",
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('natureCompetence','text',array(
//                'label'=> 'Nature de compétence:',))
//                ->add('niveauCompetence','text',array(
//                'label'=> 'Niveau de compétence:',))
//                ->add('anneeExperience', 'choice', array(
//                    'label'=> "Année d'éxperience:",
//                    'choices' => array(
//                        'Matinée' => 'Matinée',)))
//                ->add('dateDerniereEvaluation', 'date', array(
//                    'label'=> 'Date derniére évaluation:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateDerniereValidation', 'date', array(
//                    'label'=> 'Date derniére validation:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateProchaineEvaluation', 'date', array(
//                    'label'=> 'Date prochine évaluation:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
//                ->add('dateProchaineValidation', 'date', array(
//                    'label'=> 'Date prochiane validation:',
//                    'widget' => 'single_text',
//                    'format' => 'MM/dd/yyyy',
//                    'attr' => array('class' => 'datepicker')
//                ))
                ->end()
                ->with('Rémuneration théorique')

//                ->add('mtAvNatureLogement','text',array(
//                'label'=> 'Avantage nature logement:',))
//                ->add('mtAvNatureVoiture','text',array(
//                'label'=> 'Avantage nature voiture:',))
//                 ->add('mtAvNatureNourriture','text',array(
//                'label'=> 'Avantage nature nourriture:',))
//                ->add('mtAvNatureAutre','text',array(
//                'label'=> 'Avantage nature autre:',))
//                ->add('montantAugmIndividuelle','text',array(
//                'label'=> 'Montant augm. individuelle:',))
//                ->add('pourcentageAugmIndiv','text',array(
//                'label'=> "Pourcentage augm. individuelle :",))
//                ->add('ctypeAugmIndiv','text',array(
//                'label'=> 'Type augm. individuelle:',))
//                ->add('ctypeAugmCollective','text',array(
//                'label'=> 'Type augm. collective:',))
//                ->add('ctypeSath','text',array(
//                'label'=> 'Type SATH (Salaire Annuelle THéorique:',))
//                ->add('complementRtt','text',array(
//                'label'=> 'Complément (salaire) RTT:',))
//                ->add('complementSalaire','text',array(
//                'label'=> 'Complément salaire:',))
//                ->add('autreComplement','text',array(
//                'label'=> 'Autre complément:',))
//                ->add('salaire','text',array(
//                'label'=> 'Salaire mensuel/forfait:',))
//                ->add('primeFinAnnee','text',array(
//                'label'=> 'Prime fin année:',))
//                ->add('primeObjectifs','text',array(
//                'label'=> 'Prime objectifs:',))
//                ->add('primeAnnuelle3','text',array(
//                'label'=> 'Prime annuelle 3:',))
//                ->add('primeAnnuelle4','text',array(
//                'label'=> 'Prime annuelle 4:',))
//                 ->add('primeAnnuelle5','text',array(
//                'label'=> 'Prime annuelle 5:',))
//                ->add('primeMensuelle1','text',array(
//                'label'=> 'Prime mensuelle 1:',))
//                ->add('primeMensuelle2','text',array(
//                'label'=> 'Prime mensuelle 2:',))
//                ->add('primeMensuelle3','text',array(
//                'label'=> 'Prime mensuelle 3:',))
//                ->add('primeMensuelle4','text',array(
//                'label'=> 'Prime mensuelle 4:',))
//                 ->add('primeMensuelle5','text',array(
//                'label'=> 'Prime mensuelle 5:',))
//                ->add('primeMensuelle6','text',array(
//                'label'=> 'Prime mensuelle 6:',))
//                 ->add('cPrimeTransport')
//                ->add('cTransportRp')
//                ->add('mtPrTransportRp')
//                ->add('pourcentageTaxeTransport')
                ->end()
//                ->with('Social')
//                ->add('facebookUid', null, array('required' => false))
//                ->add('facebookName', null, array('required' => false))
//                ->add('twitterUid', null, array('required' => false))
//                ->add('twitterName', null, array('required' => false))
//                ->add('gplusUid', null, array('required' => false))
//                ->add('gplusName', null, array('required' => false))
//                ->end()
        ;

//        if (!$this->getSubject()->hasRole('ROLE_SUPER_ADMIN')) {
//            $formMapper
//                    ->with('Management')
//                    ->add('roles', 'sonata_security_roles', array(
//                        'expanded' => true,
//                        'multiple' => true,
//                        'required' => false
//                    ))
//                    ->add('locked', null, array('required' => false))
//                    ->add('expired', null, array('required' => false))
//                    ->add('enabled', null, array('required' => false))
//                    ->add('credentialsExpired', null, array('required' => false))
//                    ->end()
//            ;
//        }
//
//        $formMapper
//                ->with('Security')
//                ->add('token', null, array('required' => false))
//                ->add('twoStepVerificationCode', null, array('required' => false))
//                ->end()
//        ;
    }

    /**
     * {@inheritdoc}
     */
    public function preUpdate($user) {
        $this->getUserManager()->updateCanonicalFields($user);
        $this->getUserManager()->updatePassword($user);
    }

    /**
     * @param UserManagerInterface $userManager
     */
    public function setUserManager(UserManagerInterface $userManager) {
        $this->userManager = $userManager;
    }

    /**
     * @return UserManagerInterface
     */
    public function getUserManager() {
        return $this->userManager;
    }

}
